home *** CD-ROM | disk | FTP | other *** search
- Path: wuarchive!bcm!dimacs.rutgers.edu!rutgers!usc!elroy.jpl.nasa.gov!abcfd20.larc.nasa.gov!amiga-request
- From: amiga-request@abcfd20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
- Newsgroups: comp.sources.amiga
- Subject: v90i286: nodelete 1.35e - intercept DeleteFile() requests, Part01/01
- Message-ID: <comp.sources.amiga:v90i286@abcfd20.larc.nasa.gov>
- Date: 14 Oct 90 19:25:39 GMT
- Reply-To: hoover@math4.uni-bielefeld.de (Uwe Sch"urkamp)
- Lines: 716
- Approved: tadguy@uunet.UU.NET (Tad Guy)
- X-Mail-Submissions-To: amiga@uunet.uu.net
- X-Post-Discussions-To: comp.sys.amiga
-
- Submitted-by: hoover@math4.uni-bielefeld.de (Uwe Sch"urkamp)
- Posting-number: Volume 90, Issue 286
- Archive-name: util/nodelete-1.35e/part01
-
- [ uuencoded executable enclosed ...tad ]
-
- NoDelete enables you erraneous humans to once again reflect on the
- righteousness of your decisions concerning the deleting of files on
- AmigaDos devices. If you try to delete a file or a program tries to remove
- it, this is mostly done via DeleteFile() of the dos.library. When
- executed, NoDelete bends this vector to its own routine which brings up
- this cute little requester on the active window. This requester contains
- the name of the file that the system is trying to delete. If you really
- want to delete this file, click to the "Yes, Delete!" gadget. If not,
- click to the "Oops, no way!"-Gadget of the requester.
-
- #!/bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 1 (of 1)."
- # Contents: nodelete.c nodelete.doc nodelete.uu readme.txt
- # Wrapped by tadguy@abcfd20 on Sun Oct 14 15:25:38 1990
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'nodelete.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.c'\"
- else
- echo shar: Extracting \"'nodelete.c'\" \(7779 characters\)
- sed "s/^X//" >'nodelete.c' <<'END_OF_FILE'
- X/* NoDelete V1.35E (C) HooverSoft 1990
- X
- X cc NoDelete +L
- X ln NoDelete -lc32
- X
- X
- X*/
- X
- X
- X#ifdef AZTEC_C /* Works under Manx, convert it to Lattice */
- X /* if you don't mind the hassle... */
- X
- X#include<intuition/intuition.h>
- X#include<intuition/intuitionbase.h>
- X#include<libraries/dos.h>
- X#include<libraries/dosextens.h>
- X#include<stdio.h>
- X/* #define DEBUG 1 */
- X
- Xchar bodystring[80],extensions[10][10], titlebak[80], title[80];
- XULONG answer, EXT_SET = 0L, howmany = 0L;
- XUBYTE *position, *rindex();
- X
- Xstruct FileHandle *output, *Output();
- X
- Xstruct NewWindow mywindow = {
- X 100,0, /* window XY origin relative to TopLeft of screen */
- X 350,10, /* window width and height */
- X 0,1, /* detail and block pens */
- X CLOSEWINDOW+VANILLAKEY, /* IDCMP flags */
- X WINDOWDRAG+WINDOWDEPTH+WINDOWCLOSE+SIMPLE_REFRESH, /* other window flags */
- X NULL, /* first gadget in gadget list */
- X NULL, /* custom CHECKMARK imagery */
- X (UBYTE *)title, /* window title */
- X NULL, /* custom screen pointer */
- X NULL, /* custom bitmap */
- X 5,5, /* minimum width and height */
- X 640,110, /* maximum width and height */
- X WBENCHSCREEN /* destination screen type */
- X };
- X
- X
- Xstruct IntuiText body = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 30,16,
- X NULL,
- X NULL,
- X NULL
- X };
- X
- Xstruct IntuiText fbody = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 30,5,
- X NULL,
- X (UBYTE *) "System tries to fool around...",
- X &body
- X };
- X
- Xstruct IntuiText ok = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 6,3,
- X NULL,
- X (UBYTE *) "Yes, Delete!",
- X NULL
- X };
- X
- Xstruct IntuiText no = {
- X 1,0,
- X JAM1|COMPLEMENT,
- X 6,3,
- X NULL,
- X (UBYTE *) "Oops, No Way!",
- X NULL
- X };
- X
- X
- Xstruct IntuiMessage *msg, *GetMsg();
- X
- Xstruct IntuitionBase *IntuitionBase;
- Xstruct Window *mw, *aw, *OpenWindow();
- Xstruct Library *DosBase;
- XUBYTE *filename;
- Xvoid *OpenLibrary();
- Xstruct Task *FindTask();
- X
- Xvoid NoDelete()
- X{
- X#asm
- X public _LVOSetProtection
- X
- X movem.l d0-d7/a0-a6,-(sp)
- X#endasm
- X geta4();
- X#asm
- X move.l d1,_filename
- X#endasm
- X
- X if(EXT_SET)
- X {
- X
- X position = rindex(filename, '.');
- X if(!position)
- X goto delete_anyway;
- X else
- X {
- X for(answer=0L; answer < howmany; answer++)
- X {
- X if( (strcmp( (UBYTE *) position, (UBYTE *) extensions[answer])) != 0L)
- X continue;
- X else
- X goto request;
- X }
- X }
- X goto delete_anyway;
- X }
- Xrequest:
- X strcpy(bodystring, "Delete File `");
- X strcat(bodystring, (char *)filename);
- X strcat(bodystring, "'?");
- X body.IText = (UBYTE *) bodystring;
- X aw = (struct Window *) IntuitionBase->ActiveWindow;
- X answer = (long)AutoRequest(aw, &fbody, &ok, &no, NULL, NULL, 360L, 61L);
- X if(!answer)
- X {
- X ;
- X#asm
- X movem.l (sp)+,d0-d7/a0-a6
- X move.l #1,d0
- X#endasm
- X return;
- X }
- X
- X if(answer)
- X {
- X
- Xdelete_anyway:
- X ;
- X#asm
- X
- X move.l _DosBase,a6
- X move.l #$70f7,d0 ;Restore old vector
- X move.w d0,-72(a6)
- X move.l #$60000092,d0
- X move.l d0,-70(a6)
- X
- X move.l _filename,d1
- X move.l #0,d2
- X jsr _LVOSetProtection(a6)
- X
- X move.l _filename,d1
- X jsr -72(a6) ;call DeleteFile()
- X#endasm
- X
- X ;
- X
- X SetFunction(DosBase, -72L, &NoDelete);
- X
- X/* install our function */
- X
- X
- X#asm
- X movem.l (sp)+,d0-d7/a0-a6
- X move.l #1,d0
- X#endasm
- X return;
- X }
- X }
- X
- X
- Xvoid quit(why)
- XUBYTE *why;
- X{
- X Write(output, why, (ULONG) strlen(why) );
- X SetTaskPri((struct Task *)FindTask(0L), 0L);
- X if(DosBase)
- X {
- X ;
- X#asm
- X move.l _DosBase,a6
- X move.l #$70f7,d0 ;restore old vector
- X move.w d0,-72(a6)
- X move.l #$60000092,d0
- X move.l d0,-70(a6)
- X#endasm
- X ;
- X }
- X
- X if (mw)
- X CloseWindow(mw);
- X
- X if (DosBase)
- X CloseLibrary(DosBase);
- X
- X if (IntuitionBase)
- X CloseLibrary(IntuitionBase);
- X
- X exit(0L);
- X}
- X
- X/* test_nd() tests the DeleteFile vector to see if NoDelete is already
- X installed. Returns zero if NoDelete is installed, one if it is not.
- X*/
- X#asm
- X public _test_nd
- X_test_nd:
- X
- X move.l _DosBase,a6
- X cmpi.l #$60000092,-70(a6)
- X bne.s _is_there
- X moveq #1,d0
- X bra.s _end
- X_is_there:
- X moveq #0,d0
- X_end:
- X rts
- X#endasm
- X
- Xvoid main(argc,argv)
- Xlong argc;
- Xchar *argv[];
- X {
- X
- X static UBYTE *msg1 = (UBYTE *)"Installing NoDelete...";
- X static UBYTE *msg2 = (UBYTE *)"done. NoDelete V1.35E (c) HooverSoft 1990\n\n";
- X long i;
- X
- X DosBase = (struct Library *) OpenLibrary("dos.library",0L);
- X output = Output();
- X strcpy(title, (UBYTE *) "NoDelete V1.35E (c) HooverSoft");
- X
- X if(argc > 11)
- X quit("Sorry, only 10 extensions allowed!\n");
- X
- X/* Der erste Teil dieser If-Anweisung sucht nach allen
- X gueltigen Endungen, die zu finden sind.
- X*/
- X if(argc >= 2)
- X {
- X for(i=1; i<argc; i++)
- X {
- X
- X if(argv[i][0] == '.')
- X {
- X EXT_SET = 1L;
- X strcpy(extensions[howmany], argv[i]);
- X howmany++;
- X }
- X else
- X continue;
- X
- X#ifdef DEBUG
- X printf("Copied %s, Result: %s\n", argv[i], extensions[i-1L]);
- X#endif
- X }
- X
- X#ifdef DEBUG
- X printf("I found %ld extensions.\n", howmany);
- X#endif
- X
- X
- X/* Found any extensions in command line?
- X if we did, please display */
- X if(howmany)
- X strcat(title, (UBYTE *) " EXT SET");
- X/* Search for options */
- X
- X for(i=1; i<argc; i++)
- X {
- X#ifdef DEBUG
- X printf("Scanning argv[%ld]: %s\n", i, (UBYTE *) argv[i] );
- X#endif
- X if( (char) argv[i][0] == '-')
- X switch( (char) argv[i][1] )
- X {
- X case 'y': if( atoi(argv[i+1]) <= 245L)
- X mywindow.TopEdge = atoi(argv[i+1]);
- X break;
- X
- X case 'p': if(atoi(argv[i+1]) < 10L && atoi(argv[i+1]) > -20L)
- X SetTaskPri((struct Task *)FindTask(0L),\
- X (long)atoi(argv[i+1]));
- X else
- X SetTaskPri((struct Task *)FindTask(0L), -5L);
- X break;
- X
- X case default: break;
- X }
- X /* end switch */
- X /*end if */
- X /*end for */
- X }
- X
- X }
- X
- X if(!howmany)
- X {
- X EXT_SET = 0L;
- X strcat(title, (UBYTE *) " NO EXT");
- X }
- X
- X/* calculate dimension of TitleBar */
- X
- X mywindow.Width = ( strlen(title) * 8L) + 85L;
- X mywindow.LeftEdge = (640L-mywindow.Width) / 2L;
- X
- X IntuitionBase = OpenLibrary("intuition.library",0L);
- X Write(output, msg1, (ULONG)strlen(msg1));
- X
- X if( !test_nd() )
- X {
- X Write(output, "NoDelete already installed.\n",28L);
- X CloseLibrary(DosBase);
- X CloseLibrary(IntuitionBase);
- X exit(0L);
- X }
- X
- X mw = OpenWindow(&mywindow);
- X if(!mw)
- X quit("Could not open Window.\n\n");
- X
- X Write(output, msg2, (ULONG)strlen(msg2));
- X SetFunction(DosBase, -72L, &NoDelete);
- X
- X for(;;)
- X {
- X Wait(1L << mw->UserPort->mp_SigBit);
- Xgetmsg:
- X msg = GetMsg(mw->UserPort);
- X ReplyMsg(msg);
- X if (msg->Class == CLOSEWINDOW)
- X quit("NoDelete V1.35E exiting.\n\n");
- X if(msg->Class == VANILLAKEY)
- X {
- X strcpy(titlebak, (UBYTE *) "Extensions: ");
- X for(i=0L; i < howmany ; i++)
- X {
- X strcat(titlebak, extensions[i]);
- X strcat(titlebak, " ");
- X }
- X SetWindowTitles(mw, titlebak);
- X Wait(1L << mw->UserPort->mp_SigBit);
- X SetWindowTitles(mw, title);
- X ReplyMsg( GetMsg(mw->UserPort) );
- X }
- X
- X else
- X continue;
- X }
- X }
- X#endif
- X
- END_OF_FILE
- if test 7779 -ne `wc -c <'nodelete.c'`; then
- echo shar: \"'nodelete.c'\" unpacked with wrong size!
- fi
- # end of 'nodelete.c'
- fi
- if test -f 'nodelete.doc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.doc'\"
- else
- echo shar: Extracting \"'nodelete.doc'\" \(6903 characters\)
- sed "s/^X//" >'nodelete.doc' <<'END_OF_FILE'
- X *************************************************************************
- X * NoDelete V1.35 (C) HooverSoft Aug 30th, 1990 *
- X *************************************************************************
- X
- XUSAGE: 1> run NoDelete [extensions] [-p priority] [-y ypos] <ENTER>
- X from CLI only.
- X
- X
- X
- X
- X HISTORY
- X
- X CHANGES TO VERSION 1.3: SEP 1990
- XLots of changes. Thinking of writing a new documentation. Anyway,
- Xintroduced command line options -p and -y for run-time setting of priority
- Xof NoDelete and of vertical position of titlebar.
- X
- X CHANGES TO VERSION 1.2: AUG 1990
- XIntroduced the possibilty to give multiple extensions on startup. Lists
- Xextensions when pressing a key while Nodelete's titlebar is active.
- X
- X CHANGES TO VERSION 1.1: Aug 1990
- XNoDelete now automatically centers the Dragbar on Screen and calculates the
- Xcorrect width for the window if a extension is specified.
- X
- XNow works fine with AmiOmega. System won't crash if "Yes, Delete!" is
- Xselected.
- X
- XNow supports the use of extensions to ask confirmations only for special
- Xfiles ending in defined extension. Will show the selected extension in
- Xwindow's titlebar.
- X
- XNoDelete now checks if another NoDelete is already active and exits if
- Xtrue.
- X
- X CHANGES TO VERSION 1.01: Jul 1990
- XNow handles protected Files correctly. Previous version didn't complain if
- Xfile was delete protected.
- X
- XNoDelete sets its priority to a value of -5 directly after startup.
- X
- X CHANGES TO VERSION 1.00: June 1990
- XVersion 1.01 now restores the Dos Vector relative to _DosBase, so this
- Xprogram should work under Kickstart 1.3 as well. If someone already uses
- XKick 2.0, he or she should let me know if NoDelete works with that. I have
- Xheard that the funny instructions in DosBase have been replaced with a
- Xregular jump table.
- X
- X
- X WHY USE NODELETE?
- XI wrote this program mainly to make the fantastic public domain game
- X"Omega" more enjoyable to play. The author of this program thought it
- Xreasonable to have the system unlink the save-file after having reloaded it
- Xto somehow "simulate the continuity of character". Too bad that NoDelete
- Xdoes not work correctly with this program...
- X
- X WHAT IT DOES
- XNoDelete enables you erraneous humans to once again reflect on the
- Xrighteousness of your decisions concerning the deleting of files on
- XAmigaDos devices. If you try to delete a file or a program tries to remove
- Xit, this is mostly done via DeleteFile() of the dos.library. When
- Xexecuted, NoDelete bends this vector to its own routine which brings up
- Xthis cute little requester on the active window. This requester contains
- Xthe name of the file that the system is trying to delete. If you really
- Xwant to delete this file, click to the "Yes, Delete!" gadget. If not,
- Xclick to the "Oops, no way!"-Gadget of the requester. NoDelete works just
- Xfine with aliases, wildcards etc. For problems see the "known
- Xbugs"-section of this text.
- X
- X EXTENSIONS
- XLots of programs, programmers and normal people use extensions in their
- Xfile system to be able to immediately make out the contents of a file. For
- Xexample, ".c" specifies the file to be a C source code and ".bas" should
- Xcontain a basic program's source. There are tons of frequently used
- Xextensions, from ".asm" up to ".cfg". If you use NoDelete and you don't
- Xwant the system to get on your nerves by confirming EVERY rm command, you
- Xshould use a certain extension on NoDelete's command line to tell NoDelete
- Xthat it should only ask confirmation for those precious ".c" or ".iff"
- Xfiles and let all others alone.
- X
- XThe command line
- X
- X 1> run nodelete .c
- X
- Xwould tell NoDelete to only intercept the removing of files ending in ".c"
- Xand not to worry about any other files that are removed from the device.
- X
- XYou can specifiy up to ten extensions when running NoDelete. The command
- X
- X 1> run NoDelete .c .iff .tex .asm
- X
- Xwill make NoDelete complain about any file which ends in one of the
- Xspecified extensions and leave all others alone. If you have forgotten
- Xwhich extensions you specified at startup, just activate NoDelete's
- Xtitlebar and press any key. NoDelete will then give a list of extensions
- Xin the titlebar until another key is pressed.
- X
- X
- X
- X COMMAND LINE OPTIONS
- XFinally, HooverSoft is proud to have introduced command line options in
- XNoDelete. So far, two options are supported:
- X
- X-p number where number is an integer between -20 and 9. If given on
- X the command line, NoDelete will set its priority to this
- X value. If you type rubbish or use values not allowed, the
- X default priority of -5 is set.
- X
- X-y ypos where ypos is an integer ranging from zero to 245
- X This number will determine the ver-
- X tical position of NoDelete's titlebar. if you try to fool
- X NoDelete or do not give this option, the default value zero
- X (top of screen) is used.
- X
- X KNOWN BUGS
- XNoDelete cannot take care of the AmigaDos command Delete. God knows how
- Xthis command erases a disk file...
- X
- XThe Shell won't complain if you try to delete any non-existent file while
- XNoDelete has its grip on the system. This is not really a bug because
- XNoDelete works on this basis of cheating the calling function and
- Xpretending that everything is just fine and deleted.
- X
- XSometimes it is possible to get two copies of NoDelete running at the same
- Xtime. I can't explain how this is to be done, but somehow it works...
- XAnyway this happens very seldomly.
- X
- X THE LEGAL STUFF
- XNoDelete is copyright (C) by HooverSoft. It may not be copied or sold for
- Xcommercial purposes. It may be distributed and copied freely for
- Xnon-commercial purposes only.
- X
- X FURTHER PLANS & HOPELESS DREAMS
- XI would like to use CreateTask() to launch a separate Task for Nodelete.
- XThis would unlink NoDelete's memory requirements from the current stacksize
- Xof the system. It would be nice if "delete" could also be disabled but I
- Xam not sure how to do this.
- X
- X PUBLIC FEEDBACK
- XBug reports (cheers, Jensi!), criticism, comments and approvements should
- Xbe sent to
- X
- X SNAIL:
- X HooverSoft Inc.
- X Joellenbecker Weg 4
- X D-4900 Herford
- X Germany
- X
- X BITNET:
- X hoover@math4.uni-bielefeld.de
- X
- X
- XHave fun & God bless you,
- Xhoover
- END_OF_FILE
- if test 6903 -ne `wc -c <'nodelete.doc'`; then
- echo shar: \"'nodelete.doc'\" unpacked with wrong size!
- fi
- # end of 'nodelete.doc'
- fi
- if test -f 'nodelete.uu' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'nodelete.uu'\"
- else
- echo shar: Extracting \"'nodelete.uu'\" \(6513 characters\)
- sed "s/^X//" >'nodelete.uu' <<'END_OF_FILE'
- Xbegin 644 nodelete
- XM```#\P`````````#``````````(```0:````N@````$```/I```$&D[Z!^I3J
- XM>7-T96T@=')I97,@=&\@9F]O;"!A<F]U;F0N+BX``%EE<RP@1&5L971E(0``P
- XM3V]P<RP@3F\@5V%Y(0!.50``2.?__DZZ"!0I08*22JR``F=22'@`+B\L@I).I
- XMN@:>4$\I0()V2JR"=F<``+1"K()R8"9R"B`L@G).N@XL0>R!;M"(+P`O+()V#
- XM3KH'+E!/2H!F`F`04JR"<B`L@G*PK(`&9=!@>DAZ`,!(;($>3KH&;%!/+RR"L
- XMDDAL@1Y.N@JX4$](>@"R2&R!'DZZ"JI03T'L@1XI2(!&(&R"@BEH`#2"BDAX4
- XM`#U(>`%H0J="ITAL@'9(;(!B2&R`3B\L@HI.N@\<3^\`("E`@G)*K()R9@I,U
- XMWW__<`%.74YU2JR"<F=&+&R"CB`\``!P]SU`_[@@/&```)(M0/^Z(BR"DG0`\
- XM3J[_1B(L@I).KO^X2'K^\DAX_[@O+(*.3KH.8D_O``Q,WW__<`%@L&"N1&5LY
- XM971E($9I;&4@8``G/P``3E4``"\M``A.N@6H6$\O`"\M``@O+()Z3KH-@D_OF
- XM``Q"IT*G3KH-OEA/+P!.N@XF4$]*K(*.9Q@L;(*.(#P``'#W/4#_N"`\8```"
- XMDBU`_[I*K(*&9PHO+(*&3KH.9%A/2JR"CF<*+RR"CDZZ#5I83TJL@H)G"B\LI
- XM@H).N@U*6$]"ITZZ"R!83TY=3G4L;(*.#*Y@``"2_[IF!'`!8`)P`$YU3E7_:
- XM_$*G2'H$!TZZ#6Y03RE`@HY.N@S(*4"">DAZ`_U(;((B3KH$VE!/#*T````+Q
- XM``AO"DAZ!`).NO\D6$\,K0````(`"&T``9`K?`````'__&!*("W__.6`(&T`C
- XM#")P"``,$0`N9C(I?`````&``B`M__SE@"!M``PO,`@`<@H@+(`&3KH,!D'LS
- XM@6[0B"\`3KH$;E!/4JR`!E*M__P@+?_\L*T`"&VL2JR`!F<.2'H#K$AL@B).;
- XMN@BB4$\K?`````'__&```08@+?_\Y8`@;0`,(G`(``P1`"UF``#L("W__.6`V
- XM(&T`#")P"``0*0`!2(!(P&```+P@+?_\4H#E@"!M``PO,`@`3KH$&%A/L+P`/
- XM``#U;AH@+?_\4H#E@"!M``PO,`@`3KH#^EA/.4"`#&```)8@+?_\4H#E@"!MO
- XM``PO,`@`3KH#W%A/L+P````*;$@@+?_\4H#E@"!M``PO,`@`3KH#OEA/L+S_%
- XM___L;RH@+?_\4H#E@"!M``PO,`@`3KH#H%A/+P!"ITZZ"[983R\`3KH,'E!/<
- XM8!1(>/_[0J=.N@N@6$\O`$ZZ#`A03V`88!:0O````'!G`/]ZD+P````)9P#_@
- XM-H4JW__"`M__RPK0`(;0#^\DJL@`9F$D*L@`)(>@*!2&R"(DZZ!VY03TAL1
- XM@B).N@,:6$_G@-"\````53E`@`X@/````H`R+(`.2,&0@7("3KH(0CE`@`I"N
- XMITAZ`DM.N@M44$\I0(*"+RR`BDZZ`MQ83R\`+RR`BB\L@GI.N@JV3^\`#$ZZ@
- XM_9Y*@&8P2'@`'$AZ`B<O+()Z3KH*FD_O``PO+(*.3KH*N%A/+RR"@DZZ"JY8B
- XM3T*G3KH(A%A/2&R`"DZZ"Z)83RE`@H9*K(*&9@I(>@($3KK\PEA/+RR`CDZZ2
- XM`FI83R\`+RR`CB\L@GI.N@I$3^\`#$AZ^V1(>/^X+RR"CDZZ"M1/[P`,(&R"C
- XMAB)H`%9P`!`I``]R`>&A+P%.N@K<6$\@;(*&+R@`5DZZ"G983RE`@GXO+()^,
- XM3KH*C%A/(&R"?@RH```"```49@I(>@&?3KK\1%A/(&R"?@RH`"`````49@``V
- XMFDAZ`:!(;('23KH!R%!/0JW__&`N<@H@+?_\3KH)0D'L@6[0B"\`2&R!TDZZU
- XM!@!03TAZ`7U(;('23KH%\E!/4JW__"`M__RPK(`&9<A(;('2+RR"ADZZ"K)09
- XM3R!L@H8B:`!6<``0*0`/<@'AH2\!3KH*)%A/2&R"(B\L@H9.N@J*4$\@;(*&'
- XM+R@`5DZZ";!83R\`3KH)S%A/8`#_"$Y=3G5);G-T86QL:6YG($YO1&5L971EB
- XM+BXN`&1O;F4N($YO1&5L971E(%8Q+C,U12"I($AO;W9E<E-O9G0@,3DY,`H*/
- XM`&1O<RYL:6)R87)Y`$YO1&5L971E(%8Q+C,U12"I($AO;W9E<E-O9G0`4V]RG
- XM<GDL(&]N;'D@,3`@97AT96YS:6]N<R!A;&QO=V5D(0H`($585"!3150`($Y/W
- XM($585`!I;G1U:71I;VXN;&EB<F%R>0!.;T1E;&5T92!A;')E861Y(&EN<W1AH
- XM;&QE9"X*`$-O=6QD(&YO="!O<&5N(%=I;F1O=RX*"@!.;T1E;&5T92!6,2XS%
- XM-44@97AI=&EN9RX*"@!%>'1E;G-I;VYS.B``(```(&\`!")(2AAF_%.($"\`9
- XM"[/(9PBP(&;X(`A.=7``3G4@;P`$(`@B;P`($-EF_$YU(&\`!"`(2AAF_)'`S
- XM(`A3@$YU3E4``$CG#"`D;0`(#!(`(&<!(`"68$4HI@\'H`#!(`+68&>@%2[
- XMBF`(#!(`*V8"4HIX`&`@($I2BA`02(!(P'(*+P`@!$ZZ!R(B']*`*`&8O```]
- XM`#`0$DB`2,!![("3"#```@@`9LY*A6<&(`1$@&`"(`1,WP0P3EU.=3`\?_]@9
- XM!#`O``Y30&L4(&\`!")O``BQ"68,4TA*&%?(__9P`$YU8P1P`4YU</].=6%P]
- XM0^R!'D7L@1ZUR68.,CP`<FL(=``BPE')__PI3X*6+'@`!"E.@II(YX"`""X``
- XM!`$I9Q!+^@`(3J[_XF`&0J?S7TYS0_H`($ZN_F@I0(*>9@PN/``#@`=.KO^4N
- XM8`1.N@`:4$].=61O<RYL:6)R87)Y`$GY``!__DYU3E4``"\*2'D``0``,"R!.
- XM%,'\``8O`$ZZ!M0I0(*B4$]F%$*G2'D``0``3KH&F%!/+FR"EDYU(&R"HD)H-
- XM``0@;(*B,7P``0`0(&R"HC%\``$`"B!L@I8@+(*6D*@`!%"`*4""IB!L@J8@3
- XMO$U!3EA"ITZZ!HPD0$JJ`*Q83V<P+RT`#"\M``@O"DZZ`+(I?`````&"JB!L2
- XM@J(`:(````0@;(*B`&B````*3^\`#&!"2&H`7$ZZ!M)(:@!<3KH&:BE`@JX@+
- XM;(*N2J@`)%!/9Q`@;(*N(F@`)"\13KH%FEA/+RR"KB\*3KH">"EL@JZ"LE!/>
- XM3KH%CB!L@J(@@$ZZ!9X@;(*B(4``!F<62'@#[4AZ`"Q.N@5V(&R"HB%```Q0X
- XM3R\L@K(O+(*V3KKXD$*G3KH#C$_O``PD7TY=3G4J`$Y5``!(YPPP)&T`$"!MB
- XM``A*J`"L9Q@@;0`(("@`K.6`*``@1"`H`!#E@"9`8`0F;($6$!-(@$C`T*T`_
- XM#%2`*4""ND*G+RR"NDZZ!68I0(*^4$]F"$S?##!.74YU$!-(@$C`*@`O!2!+_
- XM4H@O""\L@KY.N@&.(&R"OM'%0_H!6!#99OPO+0`,+PHO+(*^3KH!3B!L@KY"G
- XM,%@`*7P````!@K8@;(*^T<4F2%*+)$M/[P`8$!-(@$C`*@"PO````"!G(+J\^
- XM````"6<8NKP````,9Q"ZO`````UG"+J\````"F8$4HM@S`P3`"!M``",#!,`]
- XM(F8R4HL@2U*+$!!(@$C`*@!G("!*4HH0A;J\````(F80#!,`(F8$4HM@!D(J#
- XM__]@`F#28$0@2U*+$!!(@$C`*@!G,+J\````(&<HNKP````)9R"ZO`````QG#
- XM&+J\````#6<0NKP````*9P@@2E**$(5@PB!*4HI"$$J%9@)3BU*L@K9@`/\\\
- XM0A)"IR`L@K92@.6`+P!.N@0J*4""LE!/9@A"K(*V8`#^OGH`)FR"OF`>(`7E=
- XM@"!L@K(ABP@`($L@"$H89OR1P%.(4HC7R%*%NJR"MFW<(`7E@"!L@K)"L`@`R
- XM8`#^@B``,#Q__V`$,"\`#B!O``1*&&;\4T@B;P`(4T`0V5?(__QG`D(0("\`F
- XM!$YU3.\#```$(`@B+P`,8`(0V5?)__QG!E)!8`)"&%')__Q.=4Y5``!(YPXP8
- XM)&T`"$*G2'H`CDZZ`\0I0(+"4$]F"$S?#'!.74YU(&T`#")H`"0O*0`$3KH$?
- XM&B@`6$]G4DAZ`&T@1"\H`#9.N@/L)D!*@%!/9S1(>`/M+PM.N@+0+`!03V<D]
- XM(`;E@"H`($4E:``(`*0E1@"<2'@#[4AZ`#A.N@*L)4``H%!/+P1.N@.X6$\OJ
- XM+(+"3KH"ZD*L@L)83V"`:6-O;BYL:6)R87)Y`%=)3D1/5P`J`$CG2`!"A$J`R
- XM:@1$@%)$2H%J!D2!"D0``6$^2D1G`D2`3-\`$DJ`3G5(YT@`0H1*@&H$1(!2&
- XM1$J!:@)$@6$:(`%@V"\!81(@`2(?2H!.=2\!808B'TJ`3G5(YS``2$%*068@$
- XM2$$V`30`0D!(0(##(@!(0#("@L,P`4)!2$%,WP`,3G5(028!(@!"04A!2$!"#
- XM0'0/T(#3@;:!8@22@U)`4<K_\DS?``Q.=4Y5``!*K(+&9P8@;(+&3I`O+0`(5
- XM3KH`"%A/3EU.=4Y5__PO!"MM``C__$JL@J)G+'@`8`HO!$ZZ`/Q83U*$,"R!Q
- XM%$C`N(!M[#`L@13!_``&+P`O+(*B3KH"`%!/2JR"RF<&(&R"RDZ02JR!&F<*?
- XM+RR!&DZZ`7183TJL@LYG""!L@LX@K(+22JR"UF<*+RR"UDZZ`9183TJL@MIGZ
- XM"B\L@MI.N@&$6$]*K(+>9PHO+(+>3KH!=%A/2JR"XF<*+RR"XDZZ`6183RQX=
- XM``0(+@`$`2EG%"\-2_H`"DZN_^(J7V`&0J?S7TYS2JR"KF8J2JR"OF<B+RR"(
- XMNB\L@KY.N@%<("R"ME*`Y8`O`"\L@K).N@%*3^\`$&`.3KH!."\L@JY.N@%P'
- XM6$\@+?_\+FR"EDYU*!].74YU3E4``$CG#B`H+0`(<@8@!$ZZ`$0D0-7L@J)*Q
- XMA&T.,"R!%$C`N(!L!$J29A(I?`````*"YG#_3-\$<$Y=3G4P*@`$P'R``&8('
- XM+Q).N@`N6$]"DG``8.!(YW``-`'$P"8!2$/&P$A#0D/4@TA`P,%(0$)`T(),*
- XMWP`.3G4B+P`$+&R"GD[N_]PB+P`$+&R"GD[N_X(L;(*>3N[_RDSO``8`!"QLX
- XM@IY.[O_B3OH``BQL@IY.[O_$3OH``B(O``0L;(*>3N[_ID[Z``),[P`.``0LY
- XM;(*>3N[_T$CG`01,[R"```PL;(*:3J[_E$S?((!.=4[Z``(B;P`$+&R"FD[N2
- XM_F),[P`#``0L;(*:3N[_.D[Z``(B;P`$+&R"FD[N_MHL;(*:3N[_?")O``0@2
- XM+P`(+&R"FD[N_RY.^@`"(&\`!"QL@II.[OZ,3OH``BQL@IHB;P`$("\`"$[N1
- XM_=A.^@`"(F\`!"QL@II.[OZ&(F\`!"!O``@@+P`,+&R"FD[N_EPB;P`$("\`=
- XM""QL@II.[O[4("\`!"QL@II.[O["(&\`!"QL@II.[OZ`3.\#```$+&R"PD[NH
- XM_Z`@;P`$+&R"PD[N_Z8@;P`$+&R"PD[N_[)(YP`P3.\/```,3.\`#P`<+&R"`
- XM@DZN_J1,WPP`3G4@;P`$+&R"@D[N_[@@;P`$+&R"@D[N_S0O"DSO!P``""QLU
- XM@H).KO[L)%].=0```^P````!`````0``"&`````````#\@```^H```!'````R
- XM````````9````5X`"@`!`"`"`````$X``````````````B`````````````%E
- XM``4"@`!N``$!``(``!X`$`````````````````$``@``'@`%``````````0`1
- XM```X`0`"```&``,`````````)``````!``(```8``P`````````R````````F
- XM!>P```8#`"`@("`@("`@(#`P,#`P("`@("`@("`@("`@("`@("`@D$!`0$!`:
- XM0$!`0$!`0$!`0`P,#`P,#`P,#`Q`0$!`0$!`"0D)"0D)`0$!`0$!`0$!`0$!Z
- XM`0$!`0$!`0%`0$!`0$`*"@H*"@H"`@("`@("`@("`@("`@("`@("`D!`0$`@,
- XM```4``````````````/L`````@````$````B````7`````4`````````6```A
- XB`&P```"`````B````(P````````#\@```^L````!```#\@4`>
- X``
- Xend
- Xsize 4624
- END_OF_FILE
- if test 6513 -ne `wc -c <'nodelete.uu'`; then
- echo shar: \"'nodelete.uu'\" unpacked with wrong size!
- fi
- # end of 'nodelete.uu'
- fi
- if test -f 'readme.txt' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'readme.txt'\"
- else
- echo shar: Extracting \"'readme.txt'\" \(399 characters\)
- sed "s/^X//" >'readme.txt' <<'END_OF_FILE'
- X readme.txt
- X
- XNoDelete is a program that intercepts the DeleteFile()-Call of dos.library.
- XIt allows the declaration of certain file name extensions to only intercept
- Xdeletion of files having these extensions and not bother about the rest.
- XNoDelete is CopyRight (c) HooverSoft 1990. It is freely redistributable
- Xfor non-commercial purposes only.
- X
- XEnjoy,
- X Hoover
- END_OF_FILE
- if test 399 -ne `wc -c <'readme.txt'`; then
- echo shar: \"'readme.txt'\" unpacked with wrong size!
- fi
- # end of 'readme.txt'
- fi
- echo shar: End of archive 1 \(of 1\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have the archive.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- --
- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
- Mail comments to the moderator at <amiga-request@uunet.uu.net>.
- Post requests for sources, and general discussion to comp.sys.amiga.
-